自20世纪80年代后期，C++模板的一般概念和语法保持相对稳定。类模板和函数模板是初始模板工具的一部分，类型参数和非类型参数也是。

然而，最初的设计中也有一些重要功能的添加，主要是出于C++标准库的需要。成员模板可能是这些新增功能中最基本的。奇怪的是，只有成员函数模板正式纳入了C++标准。由于编辑上的疏忽，成员类模板成为标准的一部分。

友元模板、默认模板参数和双重模板参数，是在C++98标准化过程中出现的。声明双重模板参数的能力有时称为高阶泛型。最初引入的原因是为了支持C++标准库中的某个分配器模型，但这个分配器模型后来使用了不依赖于双重模板参数的模型。后来，双重模板参数几乎要从该语言中删除了，直到1998年标准的标准化过程的时候，规范仍然是不完整。最终，委员会的大多数成员决定保留它们，从而形成了新的标准。

别名模板是2011年标准的一部分。别名模板与经常要求的“类型定义模板”特性具有相同的需求，它使编写一个模板变得容易，而这个模板只不过是现有类模板的不同拼写。使之成为标准的规范(N2258)是由Gabriel Dos Reis和Bjarne Stroustrup编写的，Mat Marcus也参与了该提案的早期草案。Gaby还为C++14(N3651)制定了变量模板建议的细节。最初，该提案只打算支持constexpr变量，但在标准草案中采用时，这一限制已经取消了。

可变参数模板是由C++11标准库和Boost库(参见[Boost])的需求驱动的，其中C++模板库使用越来越高级(和复杂)的技术可以接受任意数量模板参数。Doug Gregor, J{\"a}kko Jarvi, Gary Powell, Jens Maurer和Jason Merrill提供了标准(N2242)的初始规范。开发规范的同时，Doug还开发了该特性的原始实现(在GNU的GCC中)，这对在标准库中使用该特性有很大帮助。

折叠表达式是Andrew Sutton和Richard Smith的成果，通过N4191将其添加到C++17中。










